GAE wiki
主要解决的还是编码问题,需要各种转换
# !/usr/bin/python
# coding : utf-8
# CopyRight 2012 Adou , All Rights Reserved .
import webapp2
from google.appengine.api import users
from google.appengine.ext import db
import urllib
import os
import jinja2
class ViewTimes(db.Model):
filename = db.StringProperty()
filepath = db.StringProperty()
num = db.IntegerProperty(required=True,default=0)
jinja_environment = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))
def login(func) :
def wrapper(*args,**kw):
user = users.get_current_user()
if not user:
args[0].redirect(users.create_login_url('/todo/'))
else :
return func(*args,**kw)
return wrapper
def ip2name(ip):
ip = ip.split('.')
ip = [int(i) for i in ip]
ip[0] = chr(ip[0]|128)
ip[1] = chr(ip[1]|128)
ip[2] = chr(ip[2]|128)
ip[3] = chr(ip[3])
name = (ip[0]+ip[3]+ip[1]+ip[3]+ip[2]+ip[3]).decode('cp936').encode('utf-8')
return name
class MainPage(webapp2.RequestHandler):
def get(self):
user = users.get_current_user()
if user:
nickname = user.nickname()
else :
#nickname = ip2name(self.request.remote_addr)
nickname = self.request.remote_addr
#articles = db.GqlQuery("SELECT * FROM ViewTimes ORDER BY num DESC LIMIT 10")
content = {
'username':nickname,
#'articles':articles,
}
template = jinja_environment.get_template('index.html')
self.response.out.write(template.render(content))
class VimWiki(webapp2.RequestHandler):
def get(self,path):
filename = path.decode('utf-8')
if path.endswith('.html') :
path = 'vimwiki'+os.sep + path.decode('utf-8').encode('cp936')
if os.path.exists(path) :
self.response.out.write(open(path).read().decode('cp936'))
gps = db.GqlQuery("SELECT * FROM ViewTimes WHERE filename=:1 and filepath=:2 ORDER BY num LIMIT 1" ,filename,'vimwiki'+os.sep)
db.delete(gps)
vt = ViewTimes()
vt.filename = filename
vt.filepath = 'vimwiki' + os.sep
vt.num = 1
for gp in gps :
vt.num = vt.num + gp.num
vt.put()
else :
self.redirect('/')
class Diary(webapp2.RequestHandler):
@login
def get(self,path):
if path.endswith('.html') :
path = 'vimwiki'+os.sep+'diary'+os.sep+ path.decode('utf-8').encode('cp936')
if os.path.exists(path) :
self.response.out.write(open(path).read().decode('cp936'))
else :
self.redirect('/')
class Comment(webapp2.RequestHandler):
def get(self):
pass
class Login(webapp2.RequestHandler):
def get(self) :
self.redirect(users.create_login_url('/'))
class Logout(webapp2.RequestHandler):
def get(self) :
self.redirect(users.create_logout_url('/'))
app = webapp2.WSGIApplication(
[
('/',MainPage),
('/vimwiki/(.*)',VimWiki),
#('/vimwiki/diary/(.*)',Diary),
#('/todo/',Todo),
('/login/',Login),
('/logout/',Logout),
],
debug=True )